return {
  {
    "nvim-tree/nvim-tree.lua",
    opts = {},
    config = function()
      local function my_on_attach(bufnr)
        local api = require('nvim-tree.api')

        local function opts(desc)
          return { desc = 'nvim-tree: ' .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true }
        end

        -- copy default mappings here from defaults in next section
        -- vim.keymap.set('n', '<C-]>', api.tree.change_root_to_node, opts('CD'))
        vim.keymap.set('n', '<c-o>', api.node.run.system, opts('Open in external app'))
        vim.keymap.set('n', 't', function()
          local node = api.tree.get_node_under_cursor()
          if not node then return end

          local file = node.absolute_path
          local path = vim.fn.isdirectory(file) == 1 and file or vim.fs.dirname(file)
          vim.print(path)
          local Terminal = require("toggleterm.terminal").Terminal

          local term = Terminal:new {
            dir = path,
            name = 'horizontal',
            direction = 'horizontal',
            close_on_exit = true,
            hidden = true,
            -- float_opts = {
            --   border = "none",
            --   width = 100000,
            --   height = 100000,
            --   zindex = 200,
            -- },
            on_open = function(_)
            end,
            on_close = function(_) end,
            count = 99,
          }
          term:toggle()
        end)
        ---
        -- OR use all default mappings
        api.config.mappings.default_on_attach(bufnr)

        ---
      end

      local options = {
        on_attach = my_on_attach,
        filters = {
          dotfiles = false,
          exclude = { vim.fn.stdpath "config" .. "/lua/custom" },
        },
        disable_netrw = true,
        hijack_netrw = true,
        hijack_cursor = true,
        hijack_unnamed_buffer_when_opening = false,
        sync_root_with_cwd = true,
        update_focused_file = {
          enable = true,
          update_root = false,
        },
        view = {
          adaptive_size = false,
          side = "left",
          width = 30,
          preserve_window_proportions = true,
        },
        git = {
          enable = true,
          ignore = true,
        },
        filesystem_watchers = {
          enable = true,
        },
        actions = {
          open_file = {
            resize_window = true,
          },
        },
        renderer = {
          root_folder_label = false,
          highlight_git = false,
          highlight_opened_files = "none",

          indent_markers = {
            enable = false,
          },

          icons = {
            show = {
              file = true,
              folder = true,
              folder_arrow = true,
              git = false,
            },

            glyphs = {
              default = "󰈚",
              symlink = "",
              folder = {
                default = "",
                empty = "",
                empty_open = "",
                open = "",
                symlink = "",
                symlink_open = "",
                arrow_open = "",
                arrow_closed = "",
              },
              git = {
                unstaged = "✗",
                staged = "✓",
                unmerged = "",
                renamed = "➜",
                untracked = "★",
                deleted = "",
                ignored = "◌",
              },
            },
          },
        }
      }


      require("nvim-tree").setup(options)

      vim.schedule(function()
        vim.keymap.set('n', '<leader>e', "<cmd>NvimTreeToggle<cr>", { desc = "toggle file explorer" })

        -- vim.cmd [[NvimTreeOpen]]
      end)
    end
  },
  {
    "X3eRo0/dired.nvim",
    config = true
  }
}
